package headfirst.designpatterns.factory.b_pizzafm_factorymothod.pizzastore;

import headfirst.designpatterns.factory.b_pizzafm_factorymothod.pizza.Pizza;

public abstract class PizzaStore {

	/**
	 * 把工厂对象移到这个抽象方法中
	 * 由每个子类决定如何制作披萨
 	 */
	abstract Pizza createPizza(String item);

	/**
	 * 制作披萨流程（主店希望对订单的处理各店必须一致，不可省略步骤）
	 * 甚至可以用final修饰，防止被子类覆盖掉
	 *
	 * @param type 披萨类型
	 * @return 制作好的披萨
	 */
	public final Pizza orderPizza(String type) {
		//  pizza = factory.createPizza(type); 把创建披萨（即createPizza方法）从工厂对象中拿出
		Pizza pizza = createPizza(type);
		System.out.println("--- 制作一个 " + pizza.getName() + " ---");

		// 准备工作（每一个子类型都知道如何准备自己————都有自己的实现类）
		pizza.prepare();
		// 烘焙
		pizza.bake();
		// 切割
		pizza.cut();
		// 装盒
		pizza.box();

		return pizza;
	}
}
